# encoding: utf-8
import logging
import requests
import json
import time
from log_helper import logger

# 定义一个common的类，它的父类是object
class BaseApi(object):
    # common的构造函数
    def __init__(self, url_root):
        # 被测系统的跟路由
        self.url_root = url_root

    # 封装你自己的get请求，uri是访问路由，params是get请求的参数，如果没有默认为空
    def get(self, uri, params='', headers=None):
        # 拼凑访问地址
        url = self.url_root + uri
        logging.info(f"接口地址，{url}")
        #logging.info(params)

        # 通过get请求访问对应地址
        requests.packages.urllib3.disable_warnings()
        res = requests.get(url, params=params, headers=headers, verify=False)
        # 返回request的Response结果，类型为requests的Response类型

        return res.json()

    # 封装你自己的post方法，uri是访问路由，params是post请求需要传递的参数，如果没有参数这里为空
    def post(self, uri, params='', headers=None):
        # 拼凑访问地址
        url = self.url_root + uri
        logging.info(f"接口地址：{url}")
        #logging.info(f"入参：{params}")

        # 获取请求头类型
        try:
            content_type = headers['Content-Type']
            if 'json' in content_type:
                params = json.dumps(params)
        except:
            pass
        # 如果是json，那么通过post方式访问对应的url，并将参数赋值给requests.post默认参数data
        # 返回request的Response结果，类型为requests的Response类型
        requests.packages.urllib3.disable_warnings()
        logging.info(f"headers：{headers}")
        logging.info(f"入参：{params}")
        res = requests.post(url, data=params, headers=headers)
        logging.info(f"出参：{res.text}")
        response = res.json()


        # 接口发生异常，无msg字段，捕获打印接口返回
        try:
            msg = response['msg']
            repeatMsg = "重复提交，请稍后再试"
            if repeatMsg == msg:
                time.sleep(10)
                res = requests.post(url, data=params, headers=headers)
                response = res.json()
        except:
            logging.info(f"出参：{response}")

        return response